package br.edu.ufersa.scrumgame.mbean;

import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;

import br.edu.ufersa.scrumgame.facade.DiaFacade;
import br.edu.ufersa.scrumgame.facade.JogadorFacade;
import br.edu.ufersa.scrumgame.facade.NivelFacade;
import br.edu.ufersa.scrumgame.facade.PapelFacade;
import br.edu.ufersa.scrumgame.modelo.Jogador;
import br.edu.ufersa.scrumgame.modelo.Papel;
import br.edu.ufersa.scrumgame.util.Util;

@ManagedBean
@SessionScoped
public class CadastroJogadorMBean {
	
	@EJB
	private JogadorFacade jogadorFacade;
	
	@EJB
	private PapelFacade papelFacade;
	
	@EJB
	private NivelFacade nivelFacade;
	
	@EJB
	private DiaFacade diaFacade;
	
	private Jogador jogador = new Jogador();
	
	private List<Papel> papeis;
	
	private UploadedFile file;
	
	public Jogador getJogador() {
		return jogador;
	}
	
	public void setJogador(Jogador jogador) {
		this.jogador = jogador;
	}

	public List<Papel> getPapeis() {
		return papeis;
	}

	public void setPapeis(List<Papel> papeis) {
		this.papeis = papeis;
	}

	public List<Papel> completePapel(String descricao) {
		papeis = papelFacade.findAll();
		List<Papel> suggestions = new ArrayList<Papel>();
		
		for (Papel papel : papeis) {
			if(papel.getDescricao().startsWith(descricao)) {
				suggestions.add(papel);
			}
		}
		return suggestions;
	}
	
	public UploadedFile getFile() {
		return file;
	}

	public void setFile(UploadedFile file) {
		this.file = file;
	}

	public String cadastrar() throws NoSuchAlgorithmException {
		
		String retorno = "/publico/login.xhtml";

		jogador.setExperiencia(0);
		jogador.setScrums(100);
		jogador.setNivel(nivelFacade.find(1));
		jogador.setAcesso("JOGADOR");
		jogador.setAtivo(true);
		jogador.setSenha(Util.hashMD5Hex(jogador.getSenha()));
		jogador.setEnergia(jogador.getNivel().getMaxEnergia());
		jogador.setDiaInicio(diaFacade.getDiaAtual());

		try {
			jogadorFacade.save(jogador);
			Util.addMessage("Jogador Cadastrado com sucesso!");
		} catch (Exception e) {
			Util.addMessage("Erro ao cadastrar usuario!");
			retorno = "";
		}
		
		jogador = new Jogador();
		return retorno;
	}
	
	public void upload(FileUploadEvent event) {
		jogador.setFoto(event.getFile().getContents());
	}
	
}
